package java_thinking.unit_15._15_10;

import java_thinking.unit_15.Holder;

/**
 * @Description :   捕获转换
 * @author: cww
 * @DateTime: 2019-04-07 10:33
 */

/**
 * 这里发生的是：参数类型在调用f2()的过程中被捕获，因此它可以在对f1()的调用中被使用
 * 捕获只有在这样的情况下可以工作：既在方法内部，你需要使用确切的类型
 */
public class _4_1_CaptureConversion {
    static <T> void f1(Holder<T> holder) {
        T t = holder.get();
        System.out.println(t.getClass().getSimpleName());
    }
    static void f2(Holder<?> holder) {
        f1(holder);
    }

    public static void main(String[] args) {
        Holder raw = new Holder<Integer>(1);
        //产生警告
        f1(raw);
        //无警告
        f2(raw);
        Holder rawBasic = new Holder();
        //警告
        rawBasic.set(new Object());
        //无警告
        f2(rawBasic);
        Holder<?> wildcarded = new Holder<Double>(1.0);
        f2(wildcarded);

    }
}
